import { Catch, HttpException, ExceptionFilter, ArgumentsHost, HttpStatus } from '@nestjs/common';

/**
 * HTTP 异常过滤器
 * 用于统一处理 HTTP 异常，将异常转换为标准的响应格式
 */
@Catch(HttpException)
export class HttpExceptionsFilter implements ExceptionFilter {
  /**
   * 捕获并处理异常
   * @param exception - 捕获到的异常对象
   * @param host - 参数主机，用于获取请求上下文
   */
  catch(exception: any, host: ArgumentsHost) {
    // 获取 HTTP 上下文
    const ctx = host.switchToHttp();
    // 获取响应对象
    const response = ctx.getResponse();
    // 获取异常状态码
    const status = exception.getStatus();
    // 获取异常响应信息
    const exceptionResponse = exception.getResponse();
    
    // 获取错误消息，如果不存在则使用默认消息
    let message = exceptionResponse.message ?? 'Service Error';

    // 处理验证错误等返回数组形式的错误消息
    if (exceptionResponse?.message instanceof Array) {
      message = exceptionResponse.message[0];
    }

    // 返回统一格式的错误响应
    response.status(200).json({
      code: status,        // 错误状态码
      msg: message,        // 错误消息
      data: null,          // 数据字段为空
    });
  }
}
